<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/webflow-config"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:beans="http://www.springframework.org/schema/beans"
             xsi:schemaLocation="
		http://www.springframework.org/schema/webflow-config http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.0.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">


    <!-- Executes flows: the entry point into the Spring Web Flow system -->
    <!--FlowExecutor 是 Spring Web Flow 的一个核心接口，启动某个 flow ，都要通过这个接口来进行。-->
    <!--FlowRegistry 中注册的 flow 可能会有多个,每个 flow 都会有 id ,FlowExecutor 就是通过 id 来找出要执行的 flow 。-->
    <flow-executor id="flowExecutor">
    </flow-executor>

    <!-- The registry of executable flow definitions -->
    <!--FlowRegistry 是存放 flow 的仓库-->
    <!--每个定义 flow 的 XML 文档被解析后，都会被分配一个唯一的 id ，并以 FlowDefinition 对象的形式存放在 FlowResigtry 中。-->
    <flow-registry id="flowRegistry"
                   flow-builder-services="flowBuilderServices"
                   base-path="/WEB-INF/Pages">
        <flow-location-pattern value="/**/*-flow.xml"/>
    </flow-registry>

    <!-- Plugs in a custom creator for Web Flow views -->
    <!--flow-builder-services 属性的配置指明了在这个 flow-registry “仓库”里的 flow 的一些基本特性-->
    <!--我们需要在 flow-builder-services 属性中指明 Spring Web Flow 中所用到的 view
    ，由 Spring Web MVC 的“ View Resolver ”来查找-->
    <flow-builder-services id="flowBuilderServices" view-factory-creator="viewFactoryCreator" development="true"/>

    <!-- Using spring mvc configuration viewResolver-->
    <!--The default ViewFactoryCreator produces Spring MVC ViewFactories capable of rendering JSP-->
    <beans:bean id="viewFactoryCreator" class="org.springframework.webflow.mvc.builder.MvcViewFactoryCreator">
        <beans:property name="viewResolvers" ref="viewResolver"/>
    </beans:bean>

    <!-- Enables FlowHandler Called by DispatcherServlet -->
    <!--需要一种接收执行 flow 的请求，然后根据请求来启动相应 flow的handler （处理器）， Spring Web Flow 2.0 提供了两种方案可供选择。
    第一种方案是自己编写实现了 FlowHandler 接口的类，让这个类来实现这个功能。第二种方案是使用一个现成的叫做 FlowController 的控制器。
    第一种方案灵活性比较大，在许多场合可能也是唯一的选择，但对每个 flow 都需要编写相应的 FlowHandler-->
    <beans:bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
        <beans:property name="flowExecutor" ref="flowExecutor"/>
    </beans:bean>

    <!-- Enable flow enter point work with given url-->
    <!--Spring Web MVC 中处理请求的 servlet 是 DispatcherServlet ，
    如果请求的路径满足 DispatcherServlet 的映射条件，
    则 DispatcherServlet 会找出 Spring IoC 容器中所有的 HandlerMapping ，
    根据这些 HandlerMapping 中匹配最好的 handler来处理请求。
    当 Controller 处理完毕，一般都会返回一个 view 的名字，DispatcherServlet再根据这个view的名字找到相应的视图资源返回给客户端。-->
    <beans:bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping"
                name="/spring_sample/Collector">
        <beans:property name="order" value="-1"/>
        <beans:property name="flowRegistry" ref="flowRegistry"/>
    </beans:bean>

    <!--<beans:bean name="/spring_sample/Collector"
    class="Collector.CollectorHandler"/>-->
</beans:beans>